<?php
namespace Album\Controller;
/**
 * @author 李福强
 */

use Zend\Mvc\Controller\AbstractActionController;
use Album\Model\AlbumTable;
use Zend\View\Model\ViewModel;
use Album\Form\AlbumForm;
use Album\Model\Album;
class AlbumController extends AbstractActionController
{
    protected $albumTable;
    
	public function indexAction()
	{
		return new ViewModel(array(
		    'albums' => $this->getAlbumTable()->fetchAll(),
		));
	}
	
	public function addAction()
	{
		$form = new AlbumForm();
		$form->get('submit')->setValue('Add');
		$request = $this->getRequest();
		if($request->isPost()) {
			$album = new Album();
			$form->setInputFilter($album->getInputFilter());
			$form->setData($request->getPost());
			if ($form->isValid()) {
				$album->exchangeArray($form->getData());
				$this->getAlbumTable()->saveAlbum($album);
				
				//redirect to list of albums
				return $this->redirect()->toRoute('album');
			}
		}
		return array('form' => $form);
	}
	
	public function editAction()
	{
		$id = (int)$this->params()->fromRoute('id', 0);
		if (!$id) {
			return $this->redirect()->toRoute('album', array('action' => 'add'));
		}
		
		$album = $this->getAlbumTable()->getAlbum($id);
		$form = new AlbumForm();
		$form->bind($album);
		$form->get('submit')->setAttribute('value', 'Edit');
		
		$request = $this->getRequest();
		if ($request->isPost()) {
			$form->setInputFilter($album->getInputFilter());
			$form->setData($request->getPost());
			
			if($form->isValid()) {
				$this->getAlbumTable()->saveAlbum($form->getData());
				return $this->redirect()->toRoute('album');
			}
		}
		return array(
		    'id' => $id,
		    'form' => $form,
		);
	}
	
	public function deleteAction()
	{
		$id = (int)$this->params()->fromRoute('id', 0);
		if (!$id) {
			return $this->redirect()->toRoute('album');
		}
		$request = $this->getRequest();
		if($request->isPost()) {
			$del = $request->getPost('del', 'NO');
			
			if($del == 'YES') {
				$id = (int)$request->getPost('id');
				$this->getAlbumTable()->deleteAlbum($id);
			}
			return $this->redirect()->toRoute('album');
		}
		return array(
		    'id' => $id,
		    'album' => $this->getAlbumTable()->getAlbum($id),
		);
	}
	
	/**
	 * @return AlbumTable
	 */
	public function getAlbumTable()
	{
		if (!$this->albumTable) {
			$sm = $this->getServiceLocator();
			$this->albumTable = $sm->get('Album\Model\AlbumTable');
		}
		return $this->albumTable;
	}
}
?>